"""
Basic example showing how to schedule a callable using a textual reference.
"""

import os

# 引入同步调度类
# from apscheduler.schedulers.blocking import BlockingScheduler
#
#
# def task(name, info):
#     print(f"醒醒啦 {name}  {info}")
#
# if __name__ == "__main__":
#     # 构建调度实例
#     scheduler = BlockingScheduler()
#
#     scheduler.add_job("sys:stdout.write", "interval", seconds=3, args=["tick\n"])
#
#     scheduler.add_job(task, "interval", seconds=3, args=("小马同学", "开饭啦"))
#
#
#     try:
#         # 启动调度
#         scheduler.start()
#     except (KeyboardInterrupt, SystemExit):
#         pass




"""
Demonstrates how to schedule a job to be run in a process pool on 3 second intervals.
"""

import os
from datetime import datetime

from apscheduler.schedulers.blocking import BlockingScheduler


# def tick():
#     print(f"Tick! The time is: {datetime.now()}")
#
#
# if __name__ == "__main__":
#     scheduler = BlockingScheduler()
#     scheduler.add_executor("processpool")
#     scheduler.add_job(tick, "interval", seconds=3)
#     print("Press Ctrl+{} to exit".format("Break" if os.name == "nt" else "C"))
#
#     try:
#         scheduler.start()
#     except (KeyboardInterrupt, SystemExit):
#         pass



"""
Demonstrates how to use the asyncio compatible scheduler to schedule a job that executes on 3
second intervals.
"""

# import asyncio
# import os
# from datetime import datetime
#
# from apscheduler.schedulers.asyncio import AsyncIOScheduler
#
#
# def tick():
#     print(f"Tick! The time is: {datetime.now()}")
#
#
# async def main():
#     scheduler = AsyncIOScheduler()
#     scheduler.add_job(tick, "interval", seconds=3)
#     scheduler.start()
#     print("Press Ctrl+{} to exit".format("Break" if os.name == "nt" else "C"))
#     while True:
#         await asyncio.sleep(1000)
#
#
# if __name__ == "__main__":
#     # Execution will block here until Ctrl+C (Ctrl+Break on Windows) is pressed.
#     try:
#         asyncio.run(main())
#     except (KeyboardInterrupt, SystemExit):
#         pass



# import asyncio
# import os
# from datetime import datetime,timedelta
#
# from apscheduler.schedulers.asyncio import AsyncIOScheduler
# from apscheduler.triggers.date import DateTrigger
#
# def tick():
#     print(f"Tick! The time is: {datetime.now()}")
#
#
# async def main():
#     scheduler = AsyncIOScheduler()
#
#     # 指定时间运行爬虫
#     scheduler.add_job(tick, DateTrigger(datetime.now() + timedelta(seconds=10)))
#     scheduler.start()
#     print("Press Ctrl+{} to exit".format("Break" if os.name == "nt" else "C"))
#     while True:
#         await asyncio.sleep(1000)
#
#
# if __name__ == "__main__":
#     # Execution will block here until Ctrl+C (Ctrl+Break on Windows) is pressed.
#     try:
#         asyncio.run(main())
#     except (KeyboardInterrupt, SystemExit):
#         pass











"""
This example demonstrates the use of the MongoDB job store.
On each run, it adds a new alarm that fires after ten seconds.
You can exit the program, restart it and observe that any previous alarms that have not fired yet
are still active. Running the example with the --clear switch will remove any existing alarms.
"""

import os
import sys
from datetime import datetime, timedelta

from apscheduler.schedulers.blocking import BlockingScheduler


def alarm(time):
    print(f"Alarm! This alarm was scheduled at {time}.")


if __name__ == "__main__":
    scheduler = BlockingScheduler()
    scheduler.add_jobstore("mongodb", collection="example_jobs")
    if len(sys.argv) > 1 and sys.argv[1] == "--clear":
        scheduler.remove_all_jobs()

    alarm_time = datetime.now() + timedelta(seconds=10)
    scheduler.add_job(alarm, "date", run_date=alarm_time, args=[datetime.now()])
    print("To clear the alarms, run this example with the --clear argument.")
    print("Press Ctrl+{} to exit".format("Break" if os.name == "nt" else "C"))

    try:
        scheduler.start()
    except (KeyboardInterrupt, SystemExit):
        pass